package com.changgou.goods.service.impl;

import com.changgou.goods.dao.CategoryMapper;
import com.changgou.goods.dao.ParaMapper;
import com.changgou.goods.dao.TemplateMapper;
import com.changgou.goods.pojo.Category;
import com.changgou.goods.pojo.Para;
import com.changgou.goods.pojo.Template;
import com.changgou.goods.service.ParaService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @Author: wzw
 * @Date: 2020/12/9 15:29
 * @version: 1.8
 */
@Service
public class ParaServiceImpl implements ParaService {

    //注入mapping
    @Autowired
    private ParaMapper paraMapper;

    //注入模板的Mapping
    @Autowired
    private TemplateMapper templateMapper;

    //注入商品分类CategoryMapper
    @Autowired
    private CategoryMapper categoryMapper;

    /**
     * @author wzw
     * 添加
     * @Date 16:36 2020/12/9
     * @param para
     * @return void
    **/
    @Override
    public void add(Para para) {
        //实现功能
        paraMapper.insert(para);
        //修改模板统计数据
        updateParaNum(para,1);
    }

    /**
     * 修改模板统计数据
     * @param para:操作的参数
     * @param count:变更的数量
     */
    private void updateParaNum(Para para, int count) {
        //根据模板id 获取要修改的模板
        Template template = templateMapper.selectByPrimaryKey(para.getTemplateId());
        System.out.println(template);
        //修改该总数+1
        template.setParaNum(template.getParaNum()+count);
        //修改模板数量统计
        templateMapper.updateByPrimaryKeySelective(template);

    }

    /**
     * @author wzw
     * 删除
     * @Date 16:36 2020/12/9
     * @param id
     * @return void
    **/
    @Override
    public void delete(Integer id) {
        //先修改不然删就没了
        Para para = paraMapper.selectByPrimaryKey(id);
        //修改模板数量统计
        updateParaNum(para,-1);

        //实现功能:删除
        paraMapper.deleteByPrimaryKey(id);

    }

    /**
     * @author wzw
     * 修改该
     * @Date 16:36 2020/12/9
     * @param para
     * @return void
    **/
    @Override
    public void update(Para para) {
        paraMapper.updateByPrimaryKey(para);
    }

    /**
     * @author wzw
     * 查询一个
     * @Date 16:36 2020/12/9
     * @param id
     * @return com.changgou.goods.pojo.Para
    **/
    @Override
    public Para findById(Integer id) {
        return paraMapper.selectByPrimaryKey(id);
    }

    /**
     * @author wzw
     * 查询一群
     * @Date 16:37 2020/12/9
     * @param
     * @return java.util.List<com.changgou.goods.pojo.Para>
    **/
    @Override
    public List<Para> findAll() {
        return paraMapper.selectAll();
    }

    /**
     * @author wzw
     * 条件查询
     * @Date 16:37 2020/12/9
     * @param para
     * @return java.util.List<com.changgou.goods.pojo.Para>
    **/
    @Override
    public List<Para> findList(Para para) {
        //构建查询条件
        Example example = createExample(para);
        //根据构建的条件查询数据
        return paraMapper.selectByExample(example);
    }

    /**
     * Para构建查询对象
     * @param para
     * @return
     */
    private Example createExample(Para para) {
        //例子模块
        Example example = new Example(Para.class);
        //添加内容
        Example.Criteria criteria = example.createCriteria();
        //判读是否有值
        if (para != null) {
            //判断是否为空
            if (!StringUtils.isEmpty(para.getId())) {
                //添加
                criteria.andEqualTo("id",para.getId());
            }
            //名字
            if (!StringUtils.isEmpty(para.getName())){
                criteria.andLike("name", "%" + para.getName() + "%");
            }
            // 选项
            if(!StringUtils.isEmpty(para.getOptions())){
                criteria.andEqualTo("options",para.getOptions());
            }
            // 排序
            if(!StringUtils.isEmpty(para.getSeq())){
                criteria.andEqualTo("seq",para.getSeq());
            }
            // 模板ID
            if(!StringUtils.isEmpty(para.getTemplateId())){
                criteria.andEqualTo("templateId",para.getTemplateId());
            }
        }
        return example;
    }

    /**
     * @author wzw
     * 分页查询
     * @Date 16:38 2020/12/9
     * @param page
 * @param size
     * @return com.github.pagehelper.PageInfo<com.changgou.goods.pojo.Para>
    **/
    @Override
    public PageInfo<Para> findPage(Integer page, Integer size) {
        //设置分页
        PageHelper.startPage(page, size);
        //查询所有
        List<Para> list = paraMapper.selectAll();
        //分页并返回
        return new PageInfo<Para>(list);
    }

    /**
     * @author wzw
     * 分页+条件查询
     * @Date 16:41 2020/12/9
     * @param para
 * @param page*
 * @param size
     * @return com.github.pagehelper.PageInfo<com.changgou.goods.pojo.Para>
    **/
    @Override
    public PageInfo<Para> findPage(Para para, Integer page, Integer size) {
        //设置分页条件
        PageHelper.startPage(page,size);
        //设置查询条件
        Example example = createExample(para);
        //实现分页+条件查询并返回
        return new PageInfo<>(paraMapper.selectByExample(example));
    }

    /**
     * @author wzw
     * 根据分类ID查询参数列表
     * @Date 8:29 2020/12/11
     * @param categoryId
     * @return java.util.List<com.changgou.goods.pojo.Para>
    **/
    @Override
    public List<Para> findByCategoryId(Integer categoryId) {
        //实现功能:根据商品id查询商品对象
        Category category = categoryMapper.selectByPrimaryKey(categoryId);
        //创建对象
        Para para = new Para();
        //设置模板id
        para.setTemplateId(category.getTemplateId());
        //封装条件
        Example example = createExample(para);
        //实现功能:
        List<Para> paraList = paraMapper.selectByExample(example);
        //返回结果集
        return paraList;
    }
}
